相信我親愛的讀者,已經能體會用 DuckDB SQL 的 lambda 花式操作 list (a.k.a array 在 duckdb 可以想成是大致上一樣的東西)。
其實 duckdb 的 lambda 在一個地方也非常好用。那就是 column function
這應該是借鏡 clickhouse 的功能 !?
column() 函數,讓我們可以有方法動態的 SELECT 出需要的 col。
假設我們有一個有 300 col 的 table ,我們要挑出 code_review
跟 col name 有包含 op4dude
並且這些 row 中有包含 op4ladies 的 col 值都要大於 2
基本上這在 Postgres 要手動找出那些 col,在手動寫上去,想到就豆頁痛。
但是在 DuckDB 可以輕鬆的用 column() 函數加上 lambda 輕鬆的辦到拉,是不是非常方便。
SELECT
code_review
COLUMNS(col -> col LIKE '%op4dude%')
FROM community
WHERE
COLUMNS(col -> col LIKE '%op4ladies%') >= 2;
颱風天就先簡單介紹一下 column() 函數 ,明天在好好介紹 DuckDB column() 函數的其他花式技巧。
附錄來寫一下 Postgres 要做相同的事情要花多少功夫
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'community' AND column_name LIKE '%op4dude%';
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'community' AND column_name LIKE '%op4ladies%';
SELECT
code_review,
<步驟 1 的所有 column name>
FROM community
WHERE
<步驟 2 的第一個 column name> >=2
AND
<步驟 2 的第二個 column name> >=2
AND
.
.
.
<步驟 2 的最後一個 column name> >=2